package com.arges.dao;


import com.arges.pojo.User;
import com.arges.util.HibernateUtils;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class UserDao {

    /**
     * hibernate 框架 添加是返回的是主键
     * @return
     */
    public Integer save(User user){
        // 获取 session
        Session session = HibernateUtils.getSession();
        // 添加 开启事务回滚
        Transaction t = session.beginTransaction();
        // 执行添加操作(返回主键)
        Integer id = (Integer) session.save(user);
        // 提交事务
        t.commit();
        // 释放资源
        session.close();
        HibernateUtils.sessionFactory.close();
        return id;
    }
    /**
     * hibernate 修改
     * @return
     */
    public void update(User user){
        // 获取 session
        Session session = HibernateUtils.getSession();
        // 添加 开启事务回滚
        Transaction t = session.beginTransaction();
        // 执行修改操作
        session.update(user);
        // 提交事务
        t.commit();
        // 释放资源
        session.close();
        HibernateUtils.sessionFactory.close();
    }
    /**
     * hibernate 删除
     * @return
     */
    public void delete(User user){
        // 获取 session
        Session session = HibernateUtils.getSession();
        // 添加 开启事务回滚
        Transaction t = session.beginTransaction();
        // 执行删除操作
        session.delete(user);
        // 提交事务
        t.commit();
        // 释放资源
        session.close();
        HibernateUtils.sessionFactory.close();
    }
    /**
     * hibernate 根据id查询
     * @return
     */
    public User selectById(Integer id){
        // 获取 session
        Session session = HibernateUtils.getSession();

        // 执行根据id查询操作
        User user = session.get(User.class, id);

        // 释放资源
        session.close();
        HibernateUtils.sessionFactory.close();
        return user;
    }

    /**
     * hibernate 查询所有
     * @return
     */
    public List<User> findAll( ){
        // 获取 session
        Session session = HibernateUtils.getSession();
        // hql查询 写的是实体类
        Query<User> query = session.createQuery("from User");

        // 执行查询所有操作
        List<User> list = query.list();
        // 释放资源
        session.close();
        HibernateUtils.sessionFactory.close();
        // 返回数据
        return list;
    }

}
